package com.pai4j.message.core.provider;

import com.pai4j.message.model.ResourceInfo;

/**
 * 资源提供者接口
 * 用于获取不同类型资源的详细信息
 * 
 * 实现此接口可支持新的资源类型（如ARTICLE、MOMENT、COURSE等）
 * 通过ResourceRegistry自动注册，无需修改现有代码
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
public interface ResourceProvider {

    /**
     * 获取资源类型标识
     * 
     * @return 资源类型（如：ARTICLE、MOMENT、COURSE等）
     */
    String getResourceType();

    /**
     * 获取资源详细信息
     * 
     * @param resourceId 资源ID
     * @return 资源信息，获取失败返回null
     */
    ResourceInfo getResourceInfo(String resourceId);

    /**
     * 获取资源拥有者ID
     * 
     * @param resourceId 资源ID
     * @return 资源拥有者用户ID，获取失败返回null
     */
    String getResourceOwner(String resourceId);

    /**
     * 判断是否支持指定的资源类型
     * 
     * @param resourceType 资源类型
     * @return 是否支持
     */
    default boolean supports(String resourceType) {
        return getResourceType().equalsIgnoreCase(resourceType);
    }

    /**
     * 获取资源的优先级
     * 数字越小优先级越高，用于多个Provider支持同一资源类型时的选择
     * 
     * @return 优先级（默认100）
     */
    default int getPriority() {
        return 100;
    }

    /**
     * 批量获取资源信息（可选实现，用于性能优化）
     * 
     * @param resourceIds 资源ID列表
     * @return 资源ID到资源信息的映射
     */
    default java.util.Map<String, ResourceInfo> batchGetResourceInfo(java.util.List<String> resourceIds) {
        java.util.Map<String, ResourceInfo> result = new java.util.HashMap<>();
        if (resourceIds != null) {
            for (String resourceId : resourceIds) {
                ResourceInfo info = getResourceInfo(resourceId);
                if (info != null) {
                    result.put(resourceId, info);
                }
            }
        }
        return result;
    }
}

